package leetcode_jz_offer.day11_list;

/**
 * 给定单向链表的头指针和一个要删除的节点的值，定义一个函数删除该节点。
 * 返回删除后的链表的头节点
 **/

/**
 * 双指针：找到链表的前驱节点和后继节点，前驱.next指向后继
 */
public class Num_18删除链表的结点 {
    private class ListNode {
      int val;
      ListNode next;
      ListNode(int x) { val = x; }
    }

  public ListNode deleteNode(ListNode head, int val) {
    if (head.val==val){
      return head.next;
    }
    ListNode prev=head;
    ListNode cur=head.next;
    while (cur!=null&&cur.val!=val){
      prev=cur;
      cur=cur.next;
    }
    //若不是因为cur为null出来，则此时cur.val一定是和val相等了
    if(cur!=null){
      prev.next=cur.next;
    }
    return head;
  }

//    public ListNode deleteNode(ListNode head, int val) {
//      if (head.val==val){
//          return head.next;
//      }
//      ListNode prev=head;
//      while (prev.next!=null){
//        if(prev.next.val==val){
//          ListNode cur=prev.next;
//          prev.next=cur.next;
//          cur.next=null;
//        }else{
//          prev=prev.next;
//        }
//      }
//      return head;
//    }
}
